package com.cskaoyan.javase.overload._1detail;

/**
 * 细节问题：
 *      在调用方法时,实参数据类型可以自动提升到形参的数据类型
 *      "兼容"
 * 当存在以上兼容时,就可能出现一次方法调用,多个重载方法都能够匹配的情况
 * 这时究竟调用哪个方法呢?
 *
 * 就近原则: 这是一种Java语法设计的原则,在很多Java语法中,都可以出现这个原则.
 * 当有多个选项都能正确匹配时，那么优先选择"最近"的。
 *
 * 何为最近的? 这就不确定了,当你能够找到一个逻辑解释清楚谁近谁远的时候,就近原则一般都会生效
 *
 * 注意事项:
 *      就近原则不是万能的,当"谁近谁远"无法解释清楚的时候,就近原则就失效了.
 *
 * 方法重载多见于jdk源码中,我们自己写代码用到方法重载实际上不多
 * 最多用在面向对象的构造器语法中
 *
 * @since 09:34
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        test(10);
        // Ambiguous method call: both 'Demo.test(double, int)' and 'Demo.test(int, double)' match
        // test(1,1);
        test(1.0, 1);
        test(1, 1.0);
    }

    // public statics void test(int a){}
    public static void test(float a) {
    }

    public static void test(long a) {
    }

    public static void test(double a) {
    }

    public static void test(double a, int b) {
    }

    public static void test(int a, double b) {
    }
}
